There are a number of types of non-volatile memory (NVM) media available that can be programmed multiple times. Examples of such media include electronic memory, such as flash electronically-erasable programmable read-only memory (EEPROM) devices, and optical memory, such as rewritable compact disc (CD) and digital video disc (DVD) media. Such media, however, typically wear out after a certain number of write/erase cycles. Flash EEPROM devices, for instance, are typically rated to endure between 10,000 and 100,000 write/erase cycles, after which the devices become unreliable.
U.S. Pat. No. 6,794,997, to Sprouse, whose disclosure is incorporated herein by reference, describes a method for extending the endurance of non-volatile memory using data encoding. One or more data bits are encoded into a larger number of non-volatile memory bit patterns such that changes to the data bits are distributed across fewer changes per non-volatile memory bit. Non-volatile memory endurance is extended since more changes to the data values are possible than can be supported by underlying changes to individual non-volatile memory bits.
One of the embodiments disclosed in this patent uses Gray codes, which were initially described by Gray in U.S. Pat. No. 2,632,058, whose disclosure is incorporated herein by reference. A Gray code is an encoding of information in which for a defined sequence, only a single bit changes state with each step through the sequence. (A conventional binary counter does not have this property.) According to Sprouse, the use of a Gray code sequence stored in non-volatile memory to encode a single data bit in effect allows the previous contents of the non-volatile memory to be used to control the next state. Thus, each single data bit change is translated into a single non-volatile memory bit change, and is distributed across multiple non-volatile memory bits.
U.S. Pat. No. 7,245,556, to Pinto, et al., whose disclosure is incorporated herein by reference, similarly describes methods for writing to non-volatile memories for increased endurance. A relatively small memory is made up of a number of individually-accessible write segments, each made up of a single memory cell or a small number of cells. A count is encoded so that it is distributed across a number of fields, each associated with one of the write segments. As the count is incremented, only a single field is changed, and these changes are evenly distributed across the fields. The changed field is then written to the corresponding segment, while the other write segments are unchanged. Consequently, the number of rewrites to a given write segment is decreased, and the lifetime correspondingly increased, by a factor corresponding to the number of write segments used.
Another approach to counting beyond endurance limits of non-volatile memories is described by Maletsky in U.S. Pat. No. 6,792,065, whose disclosure is incorporated herein by reference. The storage cells in a non-volatile memory are subdivided into two groups, one for the implementation of a rotary counter that keeps track of the less significant part of the count and another for a binary counter that keeps track of the more significant part of the count. The rotary counter implements a counting method that maximizes the count that can be obtained before the endurance limit of the memory is reached by making sure that each change of state of each cell is recorded as one count and that all cells in the rotary counter experience two change of state in every cycle. The binary counter records the number of cycles the rotary counter has gone through.